—————— Introducción a R - Manejar Datos ——————
“Herramientas de análisis cuantitativo y su aplicación en la conservación de la biodiversidad”
“Herramientas de análisis cuantitativo y su aplicación en la conservación de la biodiversidad”
Ecodiversa Tropical
1. Objetivos de Aprendizaje
Al final de este taller, podrás aprender cómo:
- Agrupar y resumir datos usando el paquete “dplyr”.
- Usar las funciones
mutate(),filter(),select(),group_by()ysummarise()del paquete “dplyr” para modificar estructuras de datos. - Usar las funciones
group_by()ysummarise()para analizar estructuras de datos. - Cargar datos en varios formatos.
- Usar las funciones
pivot_longer()ypivot_wider()del paquete “tidyr” para modificar la disposición de estructuras de datos. Usar las funcionesstr_replace()ystr_remove()del paquete “stringr” para manipular caracteres en estructuras de datos.
2. Para Empezar
Que es necesario para limpiar datos en R y por que es importante?
Ahora que hemos aprendido cómo visualizar datos, vamos a hablar sobre unos paquetes y funciones necesarios para manejar datos, que fueron útiles para crear visuales interesantes en el taller previo. Anteriormente, hablamos sobre la importancia de crear gráficos que resuenen con tu audiencia y reflejen tu mensaje deseado. Ahora que sabemos cómo lograr esto, es importante aprender a manipular datos para reflejar nuestro mensaje deseado.
Los datos vienen en muchos tipos de formas y lo que es útil o práctico para una aplicación no necesariamente funcionaría para otra. R tiene requisitos específicos sobre la configuración y los tipos de datos que se pueden pasar entre las funciones. Entonces, es muy importante tener la habilidad de manipular tus datos y darles la forma necesaria. Algunas de las funciones de las que hablaremos en este taller tienen el poder de manipular estructuras de datos mediante filtrado, reorganización y acomodo de caracteres.
¿Qué es necesario para manipular datos en R?
Ahora, vamos a instalar los paquetes que vamos a usar en este taller. Para empezar, vamos a instalar los paquetes “dplyr”, “tidyr” y “stringr”. Solo es necesario hacer esto una vez, ya que los paquetes se guardarán automáticamente en la sección “Packages” en RStudio. Los paquetes te dan acceso a todas las funciones creadas por el usuario y se pueden instalar usando la siguiente línea de código:
install.packages('dplyr')
install.packages('tidyr')
install.packages('stringr')Cuando los paquetes terminen de instalarse, aparecerá un mensaje indicando que los paquetes fueron instalados con éxito!
3. Paquetes para crear graficos
3.1 dplyr
Dplyr es un paquete útil para reorganizar, modificar y manipular datos. Es posible que utilices este paquete con frecuencia en el laboratorio. Por favor, carga este paquete en R usando library(). Ahora, vamos a hablar de cinco funciones específicas en el paquete “dplyr”: filter(), mutate(), select(), group_by() y summarise().
Tips!
Recuerda que cada vez que abras R de nuevo y desees utilizar el paquete dplyr, debes cargarlo usando la función library().
library(dplyr)
library(tidyr)
library(stringr)
library(ggplot2)Sin embargo, antes de adentrarnos en los detalles de cómo aplicar estas funciones, necesitamos hablar sobre la estructura de las funciones de dplyr. Afortunadamente, todas las funciones de dplyr siguen la misma estructura básica.
La primera parte de esta línea de código es la función dplyr, al igual que cualquier otra función en R. En la segunda parte de esta línea, encontrarás el nombre de la estructura de datos. En este caso, nuestra estructura de datos se llama “butterfly” y contiene datos cualitativos de una población de mariposas atlánticas del 2018. La tercera parte de la línea de código es una serie de comandos para especificar exactamente qué debe hacer la función dplyr. Puedes utilizar desde uno hasta miles de comandos en una función de dplyr para hacerla más general o específica.
En preparación para los ejemplos siguientes, por favor carga los datos “ATLANTIC_BUTTERFLIES_sites.csv” en R y asígnalos a un objeto con el nombre “butterfly”.
butterfly <- read.csv2("ATLANTIC_BUTTERFLIES_sites.csv")
En las siguientes líneas de código en este taller, las funciones no modificarán las estructuras de datos permanentemente con el propósito de los ejemplos instructivos. Para guardar las modificaciones de la estructura de datos, se debe asignar la función a un objeto.
Compara los dos ejemplos de código siguientes y presta atención a cuál código modifica la estructura de datos y se encuentra en el “environment”:
Código 1
filter(butterfly, sites_ID == "bor1122")| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1122 | Brazil | BAHIA | CRUZ DAS ALMAS | Campus da Universidade Federal do Reconcavo Baiano | -12.65 | -39.11666667 | Not Precise | NA | 220 | 139 | 23.14 | 1078 | Atlantic Forests | Bahia interior forests | Floresta Estacional Semidecidual | Diamantina |
Código 2
butterfly_modified <- filter(butterfly, sites_ID == "bor1120")3.2 dplyr: filter - filtrando datos basado en criteros
Una de las funciones más útiles de dplyr es filter(). Con esta función, es posible filtrar observaciones específicas basándose en las entradas en una o más columnas.
Ahora vamos a explorar la estructura de datos “butterfly” en más detalle. Podemos abrir la estructura utilizando la función view() o haciendo clic en “butterfly” en el panel de “data”. Aquí podemos ver que la columna “número de sitio” (sites_ID) tiene varios tipos diferentes de “números de sitio” (sites_ID). ¿Qué pasaría si quisiéramos crear una estructura de datos que solo incluya las observaciones del sitio “bor1001”? Esto es cuando utilizaríamos la función filter() en la siguiente línea de código:
filter(butterfly, sites_ID == "bor1001")| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
Además, es posible filtrar observaciones numéricamente. Por ejemplo, para obtener una estructura de datos que contenga todos los sitios donde cayó más de 1000 mm de lluvia, utilizaremos la siguiente línea de código. Presta atención a que cuando filtras por número, no es necesario poner comillas al número.
filter(butterfly, A_rainfall >= 1000)| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior |
Finalmente, es posible usar un número infinito de condiciones para filtrar la estructura de datos, todo dentro de la misma línea de código. Por ejemplo, si quisieras crear una estructura de datos que contenga solamente los sitios en Río de Janeiro donde cayó más de 1000 mm de lluvia, usarías esta línea de código:
filter(butterfly, State == "RIO DE JANEIRO", A_rainfall >= 1000)| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1018 | Brazil | RIO DE JANEIRO | ITATIAIA | Paque Nacional do Itatiaia | -22.375278 | -44.662222 | 9000 | 28086.06751 | 2000-2600 | 2534 | 9.39 | 2300 | Atlantic Forests | Campos Rupestres montane savanna | Floresta Ombrofila Densa | Florestas de Interior |
| bor1019 | Brazil | RIO DE JANEIRO | GUAPIMIRIM | Guapimirim | -22.49305556 | -42.94916667 | 30 | NA | 50-250 | 305 | 22 | 1441 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
| bor1020 | Brazil | RIO DE JANEIRO | CACHOEIRAS DE MACACU | Reserva Ecologica de Guapiacu | -22.45388889 | -42.77166667 | 30 | 7.385 | 30-180 | 120 | 22.85 | 1284 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
| bor1021 | Brazil | RIO DE JANEIRO | CACHOEIRAS DE MACACU | Boca do Mato | -22.40583333 | -42.60694444 | 30 | NA | 200-450 | 488 | 20.28 | 1277 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
| bor1022 | Brazil | RIO DE JANEIRO | PETROPOLIS | Independencia and Alto Xerem and Petropolis | -22.54416667 | -43.20472222 | 30 | NA | 900-1000 | 592 | 18.38 | 1867 | Atlantic Forests | Serra do Mar coastal forests | Floresta Ombrofila Densa | Serra do Mar |
Información!
La función filter() filtrará en el orden en que los elementos son listados en la función. Por ejemplo, para la línea de código previa, R filtrará por “estado” (State) y luego por “cantidad de lluvia” (A_rainfall). Con esta información, presta atención al orden de los elementos para filtrar tus datos de la manera que desees.
3.3 dplyr: select() - modificando estructaras de datos basado en nombre de las columnas
Otra función importante es la función select(). Esta función es similar al uso del símbolo “$” porque ambas te permiten examinar una parte específica de la estructura de datos. Esta función es particularmente útil cuando estás trabajando con estructuras de datos extensas. Específicamente, la función select() te permite seleccionar una o más columnas de tu estructura de datos y transferirlas a una nueva estructura de datos.
Por ejemplo, imagina que deseas crear una estructura de datos que contenga solamente las columnas “numero de sitio” (sites_ID) y “estado” (State) de la estructura de datos original, “butterfly”. Puedes lograr esto utilizando la siguiente línea de código:
select(butterfly,sites_ID, State)| sites_ID | State |
|---|---|
| bor1001 | RIO GRANDE DO SUL |
| bor1002 | RIO GRANDE DO SUL |
| bor1003 | RIO GRANDE DO SUL |
| bor1004 | PARANA |
| bor1005 | PARANA |
Información!
Las diferentes columnas que seleccionaste están dividas entre comas y los nombres de las columnas tienen que tener los mismos nombres de la estructura de datos original (esto incluye el uso de mayúsculas, espacios, guiones,periodos, etc).
Si planillas a crear una estructura de datos que contiene la mayoría de columnas de la estructura original, puede ser tedioso a listar todos los nombres de las columnas. Afortunadamente, la función select() permite quitar columnas usando el símbolo “-”. Ahora, imagine que queremos a crear una estructura de datos que contiene todas las columnas de la original “butterfly” estructura excluyendo “numero de sitio” (sites_ID) y “estado” (State) utilizáramos la siguiente linea de código:
select(butterfly,-sites_ID, -State)| Country | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Brazil | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| Brazil | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria |
| Brazil | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior |
| Brazil | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria |
| Brazil | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior |
Finalmente, imagina que quieres crear una estructura de datos que contenga columnas que estén agrupadas en la estructura original. En este caso, puedes usar el símbolo “:” para ahorrar tiempo al escribir todos los nombres de las columnas. Por ejemplo, presta atención a la estructura “butterfly” e imagina que quieres crear una nueva estructura de datos que contenga las primeras cuatro columnas de la estructura “butterfly”, desde “numero de sitio” (sites_ID) hasta “altitud” (altitude). Para lograr esto, puedes utilizar la siguiente línea de código:
select(butterfly, sites_ID:Altitude)| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude |
|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 |
3.4 dplyr: mutate - agregando columnas a estructuras de datos
La función mutate() se utiliza para agregar columnas a una estructura de datos existente. La nueva columna generalmente es una función de una o más de las columnas existentes. Por ejemplo, imagina que quieres añadir una columna a la estructura “butterfly” que sea igual al logaritmo de la columna “A_rainfall”. Esta acción se puede realizar de dos maneras.
Primero, puedes crear una nueva estructura de datos que incluya todas las columnas presentes en la estructura original de “butterfly”, con la nueva adición. Esto es similar a los ejemplos anteriores con filter() y select():
mutate(butterfly, Log_Rainfall = log(A_rainfall))| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs | Log_Rainfall |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.357556 |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria | 7.641564 |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior | 7.417580 |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.403061 |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior | 7.376508 |
También es posible añadir más de una columna a una estructura de datos utilizando la siguiente línea de código:
mutate(butterfly, Log_Rainfall = log(A_rainfall), climate_index = A_mean_temp * A_rainfall)En esta linea de código, añadimos dos columnas, la columna previa que toma el logaritmo de la columna “A_rainfall” y una nueva columna, “climate_index”, que calcula el indice de clima con multiplicar las columnas “A_rainfall” y “A_mean_temp”.
Que pasa cuando ejecutas la linea de codigo previa?
R indica un error al calcular el índice climático debido a que la columna de temperatura, “A_mean_temp”, no es numérica.
Para examinar la estructura de datos “butterfly”, recuerda que es posible utilizar la función str():
str(butterfly)## 'data.frame': 122 obs. of 17 variables:
## $ sites_ID : chr "bor1001" "bor1002" "bor1003" "bor1004" ...
## $ Country : chr "Brazil" "Brazil" "Brazil" "Brazil" ...
## $ State : chr "RIO GRANDE DO SUL" "RIO GRANDE DO SUL" "RIO GRANDE DO SUL" "PARANA" ...
## $ Municipality : chr "MAQUINE" "SAO FRANCISCO DE PAULA" "SANTA MARIA" "CURITIBA" ...
## $ Study.Location: chr "Maquine" "Floresta Nacional de Sao Francisco de Paula" "Santa Maria" "Curitiba" ...
## $ Latitude : chr "-29.58333333" "-29.423669" "-29.747514" "-25.3" ...
## $ Longitude : chr "-50.26666667" "-50.386914" "-53.838197" "-49.36666667" ...
## $ Precision : chr "13000" "2200" "30" "12000" ...
## $ Reserve_Area : chr NA "1615" NA NA ...
## $ Altitude : chr "100-300" "900" "50-100" "850-1000" ...
## $ Altitude1km : int 305 917 99 956 571 936 442 280 139 803 ...
## $ A_mean_temp : chr "18.68" "14.94" "19.86" "16.69" ...
## $ A_rainfall : int 1568 2083 1665 1641 1598 1691 1256 1202 1763 1431 ...
## $ Olsong200r : chr "Atlantic Forests" "Atlantic Forests" NA "Atlantic Forests" ...
## $ Olsoneconame : chr "Araucaria moist forests" "Araucaria moist forests" "Uruguayan savanna" "Araucaria moist forests" ...
## $ Ribeirovegtype: chr "Floresta Ombrofila Mista" "Estepe" "Areas de Tensao Ecologica" "Floresta Ombrofila Mista" ...
## $ BSRs : chr "Florestas de Araucaria" "Florestas de Araucaria" "Florestas de Interior" "Florestas de Araucaria" ...
Al usar la función str(), podemos confirmar que la columna “A_mean_temp” está clasificada como un carácter en lugar de ser numérica:
Entonces, para realizar la operación de multiplicación y calcular el índice climático, debemos cambiar la columna “A_mean_temp” a formato numérico utilizando la siguiente línea de código:
butterfly <- mutate(butterfly, A_mean_temp = as.numeric(A_mean_temp))
mutate(butterfly, Log_Rainfall = log(A_rainfall), climate_index = A_mean_temp * A_rainfall)| sites_ID | Country | State | Municipality | Study.Location | Latitude | Longitude | Precision | Reserve_Area | Altitude | Altitude1km | A_mean_temp | A_rainfall | Olsong200r | Olsoneconame | Ribeirovegtype | BSRs | Log_Rainfall | climate_index |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bor1001 | Brazil | RIO GRANDE DO SUL | MAQUINE | Maquine | -29.58333333 | -50.26666667 | 13000 | NA | 100-300 | 305 | 18.68 | 1568 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.357556 | 29290.24 |
| bor1002 | Brazil | RIO GRANDE DO SUL | SAO FRANCISCO DE PAULA | Floresta Nacional de Sao Francisco de Paula | -29.423669 | -50.386914 | 2200 | 1615 | 900 | 917 | 14.94 | 2083 | Atlantic Forests | Araucaria moist forests | Estepe | Florestas de Araucaria | 7.641564 | 31120.02 |
| bor1003 | Brazil | RIO GRANDE DO SUL | SANTA MARIA | Santa Maria | -29.747514 | -53.838197 | 30 | NA | 50-100 | 99 | 19.86 | 1665 | NA | Uruguayan savanna | Areas de Tensao Ecologica | Florestas de Interior | 7.417580 | 33066.90 |
| bor1004 | Brazil | PARANA | CURITIBA | Curitiba | -25.3 | -49.36666667 | 12000 | NA | 850-1000 | 956 | 16.69 | 1641 | Atlantic Forests | Araucaria moist forests | Floresta Ombrofila Mista | Florestas de Araucaria | 7.403061 | 27388.29 |
| bor1005 | Brazil | PARANA | LONDRINA | Londrina | -23.306445 | -51.170618 | Not Precise | NA | 500-600 | 571 | 20.65 | 1598 | Atlantic Forests | Alto Parana Atlantic forests | Floresta Estacional Semidecidual | Florestas de Interior | 7.376508 | 32998.70 |
Aquí, nos vemos obligados a crear una nueva estructura de datos para poder agregar dos o más columnas por separado a la estructura existente.
3.5 dplyr: group_by - categorizando una estructura de datos por nombre de columnas
Continuaremos explorando más funciones del paquete “dplyr”. En esta ocasión, utilizaremos la función group_by(). Esta función es útil cuando tienes dos variables categóricas y deseas analizar cuántos elementos pertenecen a cada grupo en una u otra categoría. La función group_by() crea una estructura de datos que reorganiza la estructura original basándose en columnas específicas.
Esta función es especialmente útil cuando se combina con la función summarise(), de la cual aprenderemos más en la siguiente sección.
Grouped_Sites <- group_by(butterfly, sites_ID)
Grouped_Sites## # A tibble: 122 × 17
## # Groups: sites_ID [122]
## sites_ID Country State Municipality Study.Location Latitude Longitude
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 bor1001 Brazil RIO GRANDE D… MAQUINE Maquine -29.583… -50.2666…
## 2 bor1002 Brazil RIO GRANDE D… SAO FRANCIS… Floresta Naci… -29.423… -50.3869…
## 3 bor1003 Brazil RIO GRANDE D… SANTA MARIA Santa Maria -29.747… -53.8381…
## 4 bor1004 Brazil PARANA CURITIBA Curitiba -25.3 -49.3666…
## 5 bor1005 Brazil PARANA LONDRINA Londrina -23.306… -51.1706…
## 6 bor1006 Brazil PARANA GUARAPUAVA Guarapuava -25.402… -51.4211…
## 7 bor1007 Brazil PARANA MARINGA Maringa -23.435… -51.9430…
## 8 bor1008 Brazil PARANA DIAMANTE DO… Estacao Ecolo… -22.618… -52.8566…
## 9 bor1009 Brazil RIO GRANDE D… PORTO MAUA Porto Maua -27.516… -54.6666…
## 10 bor1010 Brazil PARANA BALSA NOVA Sao Luiz do P… -25.760… -50.1777…
## # ℹ 112 more rows
## # ℹ 10 more variables: Precision <chr>, Reserve_Area <chr>, Altitude <chr>,
## # Altitude1km <int>, A_mean_temp <dbl>, A_rainfall <int>, Olsong200r <chr>,
## # Olsoneconame <chr>, Ribeirovegtype <chr>, BSRs <chr>
Mirando los resultados de la función group_by(), notarás que la estructura de datos ahora está organizada por categoría, pero sigue siendo muy similar a la estructura original.
3.6 dplyr: summarise - agregando columnas sumadas a estructuras de datos
Ahora, retomaremos la función summarise() que mencionamos en la sección anterior. Esta función calcula una estadística específica en las columnas indicadas en tu línea de código y guarda estos valores en una nueva columna que se agrega a tu estructura de datos. Cuando se utilizan las funciones summarise() y group_by() juntas, la estadística se calcula para cada grupo. Por ejemplo, contaremos el número de ocurrencias en cada grupo de nuestra estructura de datos “butterfly” utilizando la función n().
summarise(Grouped_Sites, n())| sites_ID | n() |
|---|---|
| bor1001 | 1 |
| bor1002 | 1 |
| bor1003 | 1 |
| bor1004 | 1 |
| bor1005 | 1 |
4. tidyr
Además, tidyr es otro paquete que puede ayudar al usuario a manipular una estructura de datos. El paquete tidyr es especialmente útil para transformar una estructura de datos de un formato largo a un formato ancho, y viceversa.
Información!
Una estructura de datos en formato largo contiene valores que no se repiten en la primera columna. En cambio, una estructura de datos en formato ancho contiene valores que se repiten en la primera columna. Por ejemplo, considera las dos estructuras de datos que contienen los mismos datos pero en diferentes formatos:
Pero, ¿por qué es importante manipular una estructura de datos de esta manera? Los paquetes “ggplot” y “ggplot2”, que utilizamos en el taller anterior para crear gráficos, prefieren visualizar una estructura de datos en formato largo en lugar de formato ancho.
Recuerda que cada vez que abras R de nuevo y desees utilizar el paquete “tidyr”, debes cargarlo usando la función library().
library(tidyr)4.1 tidyr: pivot_longer - modificando estructuras de datos a formato larga
La primera función importante del paquete tidyr es pivot_longer(). Esta función cambia el formato de una estructura de datos, aumentando el número de filas y reduciendo el número de columnas, creando una estructura de datos en formato largo.
Vamos a utilizar la estructura de datos sin modificar, “polar”, del taller anterior para explorar esta función. Recuerda cargar la estructura de datos usando la siguiente línea:
polar <- read.delim("ANT-XXVIII_5_seabirds_marine_mammals.tab", skip = 154)Para manipular la estructura de datos “polar” a formato largo, puedes utilizar la siguiente línea de código:
polar_longer <- pivot_longer(polar, names_to = 'species', values_to = 'abundance', `E..chrysocome......Rockhopper.penguin.`:`Mola.mola......Sun.fish.`)
polar_longer| ID..Consecutive.number.of.transec…. | Date.Time..Starting.time..UTC..of.30.min…. | Latitude..Mid.latitude.of.30.min.transe…. | Longitude..Mid.longitude.of.30.min.trans…. | Bathy.depth..m…Mid.mean.water.depth.of.30.mi…. | Speed..kn…Average.speed.of.the.vessel.d…. | Distance..km…Distance.covered.during.30.mi…. | Sal..Mid.mean.surface.salinity.of….. | Temp…C…Mid.mean.surface.water.temper…. | F.chl..µg.l…Mid.fluorescence.of.30.min.tr…. | Zone..Zones..which.were.defined.on….. | species | abundance |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | E..chrysocome……Rockhopper.penguin. | 0 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | S..magellanicus……Magellanic.penguin. | 0 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | Penguins……Penguin.sp.. | 0 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | T..melanophris……Black.browed.albatross. | 16 |
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.386 | 5.35 | 10 | T..cauta……Shy.albatross. | 0 |
4.2 tidyr: pivot_wider - modificando estructuras de datos a formato ancho
La segunda función de la que hablaremos es el inverso de la primera función. El inverso de pivot_longer es pivot_wider. Esta función manipula la estructura de datos al formato ancho, aumentando el número de columnas y reduciendo el número de filas.
Para manipular la estructura de datos “polar_longer” al formato ancho, puedes utilizar la siguiente línea de código:
polar_wider <- pivot_wider(polar_longer, names_from = 'species', values_from = 'abundance')
polar_wider| ID..Consecutive.number.of.transec…. | Date.Time..Starting.time..UTC..of.30.min…. | Latitude..Mid.latitude.of.30.min.transe…. | Longitude..Mid.longitude.of.30.min.trans…. | Bathy.depth..m…Mid.mean.water.depth.of.30.mi…. | Speed..kn…Average.speed.of.the.vessel.d…. | Distance..km…Distance.covered.during.30.mi…. | Sal..Mid.mean.surface.salinity.of….. | Temp…C…Mid.mean.surface.water.temper…. | F.chl..µg.l…Mid.fluorescence.of.30.min.tr…. | Zone..Zones..which.were.defined.on….. | E..chrysocome……Rockhopper.penguin. | S..magellanicus……Magellanic.penguin. | Penguins……Penguin.sp.. | T..melanophris……Black.browed.albatross. | T..cauta……Shy.albatross. | T..chlororhynchos……Atlantic.yellow.nosed.albatross. | D..exulans……Wandering.albatross. | D..dabbenena……Tristan.albatross. | Diomedea.sp…….Great.albatrosses.sp.. | D..epomophora……Southern.royal.albatross. | D..sanfordi……Northern.royal.albatross. | D..epomophora……including.Diomedea.sanfordi. | Albatrosses……Albatross.sp.. | M..giganteus……Southern.giant.petrel. | Macronectes.sp…….Giant.petrel.sp.. | F..glacialis……Northern.fulmar. | D..capense……Cape.petrel. | P..macroptera……Great.winged.petrel. | P..feae……Fea.s.petrel. | P..incerta……Atlantic.petrel. | P..arminjoniana……Trinidade.petrel. | P..mollis……Soft.plumaged.petrel. | B..bulwerii……Bulwer.s.petrel. | P..aequinoctialis……White.chinned.petrel. | P..conspicillata……Spectacled.petrel. | Petrels……Petrel.sp.. | Pachyptila.sp…….including.Halobaena.sp.. | C..diomedea……Cory.s.shearwater. | C..edwardsii……Cape.Verde.shearwater. | P..gravis……Great.shearwater. | P..griseus……Sooty.shearwater. | P..puffinus……Manx.shearwater. | P..mauretanicus……Balearic.shearwater. | P..baroli……Macaronesian.shearwater. | P..lherminieri……Audubon.s.shearwater. | P..assimilis……Little.shearwater. | Shearwaters……Shearwater.sp.. | O..oceanicus……Wilson.s.storm.petrel. | G..nereis……Grey.backed.storm.petrel. | P..marina……White.faced.storm.petrel. | F..grallaria……White.bellied.storm.petrel. | O..castro……Madeiran.storm.petrel. | O..leucorhoa……Leach.s.storm.petrel. | O..castro……including.Oceanodroma.leucorhoa. | H..pelagicus……European.storm.petrel. | Storm.petrels……Storm.petrel.sp.. | P..aethereus……Red.billed.tropicbird. | P..lepturus……White.tailed.tropicbird. | Tropicbirds……Tropicbird.sp.. | F..aquila……Ascension.frigatebird. | F..magnificens……Magnificent.frigatebird. | M..bassanus……Northern.gannet. | S..capensis……Cape.gannet. | S..sula……Red.footed.booby. | S..leucogaster……Brown.booby. | C..skua……Great.skua. | C..maccormicki……South.polar.skua. | C..antarctica……Antarctic.skua. | S..pomarinus……Pomarine.skua. | S..parasiticus……Arctic.skua. | S..longicaudus……Long.tailed.skua. | Skuas……Skua.sp.. | B..bernicla……Brent.goose. | G..arctica……Black.throated.diver. | P..capensis……Cape.cormorant. | P..coronatus……Crowned.cormorant. | P..carbo……Great.cormorant. | P..magellani……Magellanic.diving.petrel. | Pelecanoides.sp…….Diving.petrel.sp.. | P..fulicarius……Red.phalarope. | L..canus……Common.gull. | L..melanocephalus……Mediteranean.gull. | L..argentatus……Herring.gull. | L..fuscus……Lesser.black.backed.gull. | L..michahellis……Yellow.legged.gull. | L..dominicanus……Cape.gull. | L..marinus……Great.black.backed.gull. | L..ridibundus……Black.headed.gull. | L..minutus……Little.gull. | R..tridactyla……Black.legged.kittiwake. | X..sabini……Sabine.s.gull. | Gulls……Gull.sp.. | S..hirundo……Common.tern. | S..arctica……Arctic.tern. | S..dougallii……Roseate.tern. | S..anaethetus……Bridled.tern. | S..fuscata……Sooty.tern. | S..sandvicensis……Sandwich.tern. | T..maximus……Royal.tern. | C..niger……Black.tern. | T..bergii……Crested.tern. | Terns……Tern.sp.. | A..stolidus……Brown.noddy. | U..aalge……Guillemot. | A..torda……Razorbill. | Alcidae.sp…….Alcidae.sp.. | Seabird.unident……Seabird..unidentified. | P..catodon……Sperm.whale. | M..novaeangliae……Humpback.whale. | B..physalus……Fin.whale. | B..borealis……Sei.whale. | B..acutorostrata……Minke.whale. | B..brydei……Bryde.s.whale. | G..melas……Long.finned.pilot.whale. | G..macrorhynchus……Short.finned.pilot.whale. | Globicephala.sp…….Pilot.whale.sp.. | Z..cavirostris……Cuvier.s.beaked.whale. | Beaked.whale……Beaked.whale.sp.. | Whale.unident……Whale..unidentified. | O..orca……Killer.whale. | L..australis……Peale.s.dolphin. | L..albirostris……White.beacked.dolphin. | Lagenorhynchus.sp…….Lagenorhynchus.sp.. | D..delphis……Common.dolphin. | S..frontalis……Atlantic.spotted.dolphin. | S..coeruleoalba……Striped.dolphin. | S..clymene……Clymene.dolphin. | T..truncatus……Bottlenose.dolphin. | G..griseus……Risso.s.dolphin. | S..bredanensis……Rough.toothed.dolphin. | S..longirostris……Spinner.dolphin. | Dolphin.unident……Dolphin..unidentified. | P..phocoena……Harbour.porpoise. | A..pusillus……South.African.fur.seal. | C..caretta……Loggerhead.sea.turtle. | C..mydas……Green.sea.turtle. | D..coriacea……Leatherback.sea.turtle. | Sea.turtles……Sea.turtle.sp.. | Manta.sp…….Manta.ray. | Ray……Ray. | Hammerhead.shark……Hammerhead.shark. | Shark……Shark. | Mola.mola……Sun.fish. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2012-04-11T13:30 | -51.48 | -66.86 | 108 | 8.8 | 8.1488 | 32.9347 | 8.3860 | 5.35 | 10 | 0 | 0 | 0 | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 9 | 0 | 0 | 0 | 0 | 0 | 38 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 2012-04-11T14:00 | -51.41 | -66.80 | 115 | 9.3 | 8.6118 | 32.9383 | 8.2629 | 5.49 | 10 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 29 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 2012-04-11T14:30 | -51.34 | -66.74 | 124 | 9.4 | 8.7044 | 32.9225 | 8.4985 | 5.49 | 10 | 0 | 0 | 0 | 14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 32 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 4 | 2012-04-11T15:00 | -51.28 | -66.67 | 117 | 9.2 | 8.5192 | 32.9378 | 8.4757 | 5.75 | 10 | 0 | 0 | 0 | 13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 22 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 5 | 2012-04-11T15:30 | -51.21 | -66.61 | 123 | 5.7 | 5.2782 | 32.9560 | 8.2094 | 5.80 | 10 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 297 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
5. stringr
Por último, otro paquete útil cuando se trabaja con datos, especialmente cuando se trabaja con caracteres o “strings”, es “stringr”. Este paquete puede manipular caracteres individuales dentro de un vector de caracteres, anidar o eliminar espacios en blanco e identificar patrones en un vector de caracteres.
Información!
Las funciones del paquete “stringr” comienzan con “str_”, lo cual puede ser similar a la función str() que discutimos en el taller anterior. Sin embargo, no hay relación entre estas funciones, ya que str() muestra la estructura de un conjunto de datos.
Tips!
Recuerda que cada vez que abras R de nuevo y desees usar el paquete “stringr”, debes cargarlo usando la función library().
library(stringr)En la siguiente parte del taller, vamos a usar el conjunto de datos “parrot”. La diferencia es que estos datos son la versión original y sin modificaciones de “parrot_clean” del taller previo. Empezamos cargando los datos y asignándolos al objeto “parrot”:
parrot <- read.delim("Ferrer-Paris_2013.tab", skip = 27)
colnames_parrot <- colnames(parrot) # 5.1 stringr: str_replace - reemplazar characteres en estructuras de datos
La primera función del paquete “stringr” de la que hablaremos es str_replace(). Esta función es importante cuando se desea reemplazar caracteres específicos en una estructura de datos. En la estructura de datos “parrot”, los nombres de las especies están separados por puntos. Por ejemplo, el nombre de la primera especie está escrito como “A..Amazonica….”. Vamos a utilizar la siguiente línea de código para reemplazar el primer par de puntos con un guion bajo:
parrot_replace <- str_replace(colnames_parrot, "\\.\\.", "_")
parrot_replace## [1] "Longitude" "Latitude" "Code"
## [4] "Time_min." "Date.Time" "A_amazonica...."
## [7] "A_autumnalis...." "A_barbadensis...." "A_dufresniana...."
## [10] "A_farinosa...." "A_festiva...." "A_mercenaria...."
## [13] "A_ochrocephala...."
5.2 stringr: str_remove - eliminar characteres en estructura de datos
Similar a str_replace(), la función str_remove() permite quitar caracteres específicos de una estructura de datos. Ahora que hemos reemplazado el primer grupo de puntos con un guion bajo, vamos a utilizar la función str_remove() para eliminar el segundo grupo de puntos al final del nombre de las especies. Usaremos la siguiente línea de código:
parrot_remove <- str_remove(parrot_replace, "\\.\\.\\.\\.")
parrot_remove## [1] "Longitude" "Latitude" "Code" "Time_min."
## [5] "Date.Time" "A_amazonica" "A_autumnalis" "A_barbadensis"
## [9] "A_dufresniana" "A_farinosa" "A_festiva" "A_mercenaria"
## [13] "A_ochrocephala"
Ahora que hemos limpiado los nombres de las columnas, podemos reemplazar los nombres en la estructura de datos (recuerda que extraemos los nombres cuando realizamos cambios) utilizando la siguiente línea de código:
colnames(parrot) <- parrot_removeInformación!
Al utilizar las funciones del paquete “stringr”, es importante tener en cuenta que los ejemplos de las dos funciones anteriores solo ejecutan el comando para la primera ocurrencia. Para aplicar el comando a todas las ocurrencias, el usuario debe agregar “_all” a la línea de código.
Consulta la solución del ejercicio cinco para un ejemplo de cómo realizar los cambios en los nombres en un solo paso utilizando str_remove_all().
Practica!
Ejercicio 1
Lee el archivo de ayuda para la función filter() en el paquete “dplyr”. ¿Cuáles son las funciones de las diferentes partes de esta línea de código? Completa las líneas en el gráfico siguiente usando la información en “usage”, “arguments” y “examples”.
Haz clic aquí para solucion!
A. El objeto conteniendo los datos
B. Expresiónes que entregan “True” o “False”
Ejercicio 2
Usando la estructura de datos “parrot_data”, agrega una columna que muestre la suma de las abundancias para cada especie. Verifica que la columna fue añadida usando la función head(). Nota: esta estructura de datos es otra versión modificada de la versión original, “parrot”. Presta atención a utilizar el conjunto de datos correcto.
Haz clic aquí para solucion!
parrot_data <- read.csv("venezuelan_parrots_wide.csv")
parrot_data_total <- parrot_data %>%
group_by(site) %>%
summarise_all(sum) %>%
rowwise() %>%
mutate(total_abundance = sum(c_across(A_amazonica:A_ochrocephala)) )head(parrot_data_total)## # A tibble: 6 × 6
## # Rowwise:
## site A_amazonica A_barbadensis A_farinosa A_ochrocephala total_abundance
## <chr> <int> <int> <int> <int> <int>
## 1 NM01 0 0 0 0 0
## 2 NM02 0 0 0 0 0
## 3 NM03 1 0 0 3 4
## 4 NM05 0 0 10 11 21
## 5 NM07 4 0 2 8 14
## 6 NM08 8 0 0 2 10
Ejercicio 3
Primero, utilizando la estructura de datos “butterfly”, agrupa la estructura de datos por “estado” (state) y suma los valores obtenidos por el número de ocurrencias. Segundo, visualiza los datos modificados en forma de un gráfico de barras mostrando el número de ocurrencias por estado.
Haz clic aquí para solución!
butterfly_state <- butterfly %>%
group_by(State) %>%
summarise(n_spe = n())ggplot(data = butterfly_state, aes(x = State, y = n_spe)) + geom_bar(stat = "identity")En el gráfico resultante, vemos que es difícil leer los nombres en el axis horizontal. Para corregir esto,es posible utilizar la adición a el código siguiente:
ggplot(data = butterfly_state, aes(x = State, y = n_spe)) + geom_bar(stat = "identity") +
theme(axis.text = element_text(angle = 90))
Ejercicio 4
Utilizando la estructura de datos “polar”, crea un nuevo objeto llamado “high_temp” utilizando la función filter() para demostrar todas las temperaturas mayores a 23 grados Celsius. Luego, utiliza la función mutate() para crear una nueva columna con valores de “Verdadero/Falso” y ejecuta el comando anterior. Pista: utiliza la función mutate() para crear una nueva columna.
Haz clic aquí para solución!
str(polar)## 'data.frame': 655 obs. of 144 variables:
## $ ID..Consecutive.number.of.transec.... : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Date.Time..Starting.time..UTC..of.30.min.... : chr "2012-04-11T13:30" "2012-04-11T14:00" "2012-04-11T14:30" "2012-04-11T15:00" ...
## $ Latitude..Mid.latitude.of.30.min.transe.... : num -51.5 -51.4 -51.3 -51.3 -51.2 ...
## $ Longitude..Mid.longitude.of.30.min.trans.... : num -66.9 -66.8 -66.7 -66.7 -66.6 ...
## $ Bathy.depth..m...Mid.mean.water.depth.of.30.mi.... : int 108 115 124 117 123 121 122 121 122 NA ...
## $ Speed..kn...Average.speed.of.the.vessel.d.... : num 8.8 9.3 9.4 9.2 5.7 9.7 9.3 9.2 9.9 9.8 ...
## $ Distance..km...Distance.covered.during.30.mi.... : num 8.15 8.61 8.7 8.52 5.28 ...
## $ Sal..Mid.mean.surface.salinity.of..... : num 32.9 32.9 32.9 32.9 33 ...
## $ Temp...C...Mid.mean.surface.water.temper.... : num 8.39 8.26 8.5 8.48 8.21 ...
## $ F.chl..µg.l...Mid.fluorescence.of.30.min.tr.... : num 5.35 5.49 5.49 5.75 5.8 6.01 6.14 6.5 6.61 6.91 ...
## $ Zone..Zones..which.were.defined.on..... : int 10 10 10 10 10 10 10 10 10 10 ...
## $ E..chrysocome......Rockhopper.penguin. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..magellanicus......Magellanic.penguin. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Penguins......Penguin.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ T..melanophris......Black.browed.albatross. : int 16 7 14 13 1 8 0 7 2 1 ...
## $ T..cauta......Shy.albatross. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ T..chlororhynchos......Atlantic.yellow.nosed.albatross.: int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..exulans......Wandering.albatross. : int 0 0 0 0 0 1 0 0 0 0 ...
## $ D..dabbenena......Tristan.albatross. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Diomedea.sp.......Great.albatrosses.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..epomophora......Southern.royal.albatross. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..sanfordi......Northern.royal.albatross. : int 0 2 0 0 0 0 0 0 0 0 ...
## $ D..epomophora......including.Diomedea.sanfordi. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Albatrosses......Albatross.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ M..giganteus......Southern.giant.petrel. : int 0 0 0 0 0 0 1 2 0 2 ...
## $ Macronectes.sp.......Giant.petrel.sp.. : int 0 0 0 0 0 0 0 0 3 0 ...
## $ F..glacialis......Northern.fulmar. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ D..capense......Cape.petrel. : int 1 0 0 0 0 0 0 0 0 0 ...
## $ P..macroptera......Great.winged.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..feae......Fea.s.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..incerta......Atlantic.petrel. : int 1 0 0 0 0 0 0 0 0 0 ...
## $ P..arminjoniana......Trinidade.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..mollis......Soft.plumaged.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ B..bulwerii......Bulwer.s.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..aequinoctialis......White.chinned.petrel. : int 9 1 7 5 4 7 0 8 8 4 ...
## $ P..conspicillata......Spectacled.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Petrels......Petrel.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Pachyptila.sp.......including.Halobaena.sp.. : int 0 0 0 0 0 0 0 1 0 0 ...
## $ C..diomedea......Cory.s.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..edwardsii......Cape.Verde.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..gravis......Great.shearwater. : int 38 29 32 22 297 17 5 8 0 3 ...
## $ P..griseus......Sooty.shearwater. : int 0 0 0 0 0 0 0 0 0 2 ...
## $ P..puffinus......Manx.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..mauretanicus......Balearic.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..baroli......Macaronesian.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..lherminieri......Audubon.s.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..assimilis......Little.shearwater. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Shearwaters......Shearwater.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..oceanicus......Wilson.s.storm.petrel. : int 1 4 0 4 3 0 0 2 2 1 ...
## $ G..nereis......Grey.backed.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..marina......White.faced.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ F..grallaria......White.bellied.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..castro......Madeiran.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..leucorhoa......Leach.s.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ O..castro......including.Oceanodroma.leucorhoa. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ H..pelagicus......European.storm.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Storm.petrels......Storm.petrel.sp.. : int 0 0 2 0 0 0 0 0 0 0 ...
## $ P..aethereus......Red.billed.tropicbird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..lepturus......White.tailed.tropicbird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Tropicbirds......Tropicbird.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ F..aquila......Ascension.frigatebird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ F..magnificens......Magnificent.frigatebird. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ M..bassanus......Northern.gannet. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..capensis......Cape.gannet. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..sula......Red.footed.booby. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..leucogaster......Brown.booby. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..skua......Great.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..maccormicki......South.polar.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ C..antarctica......Antarctic.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..pomarinus......Pomarine.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..parasiticus......Arctic.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..longicaudus......Long.tailed.skua. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Skuas......Skua.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ B..bernicla......Brent.goose. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ G..arctica......Black.throated.diver. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..capensis......Cape.cormorant. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..coronatus......Crowned.cormorant. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..carbo......Great.cormorant. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ P..magellani......Magellanic.diving.petrel. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Pelecanoides.sp.......Diving.petrel.sp.. : int 0 0 0 0 0 0 0 0 0 2 ...
## $ P..fulicarius......Red.phalarope. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..canus......Common.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..melanocephalus......Mediteranean.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..argentatus......Herring.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..fuscus......Lesser.black.backed.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..michahellis......Yellow.legged.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..dominicanus......Cape.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..marinus......Great.black.backed.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..ridibundus......Black.headed.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ L..minutus......Little.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ R..tridactyla......Black.legged.kittiwake. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ X..sabini......Sabine.s.gull. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Gulls......Gull.sp.. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..hirundo......Common.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..arctica......Arctic.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..dougallii......Roseate.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..anaethetus......Bridled.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..fuscata......Sooty.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ S..sandvicensis......Sandwich.tern. : int 0 0 0 0 0 0 0 0 0 0 ...
## [list output truncated]
High_Temp <- filter(polar, Temp...C...Mid.mean.surface.water.temper.... >= 23)
High_Temp| ID..Consecutive.number.of.transec…. | Date.Time..Starting.time..UTC..of.30.min…. | Latitude..Mid.latitude.of.30.min.transe…. | Longitude..Mid.longitude.of.30.min.trans…. | Bathy.depth..m…Mid.mean.water.depth.of.30.mi…. | Speed..kn…Average.speed.of.the.vessel.d…. | Distance..km…Distance.covered.during.30.mi…. | Sal..Mid.mean.surface.salinity.of….. | Temp…C…Mid.mean.surface.water.temper…. | F.chl..µg.l…Mid.fluorescence.of.30.min.tr…. | Zone..Zones..which.were.defined.on….. | E..chrysocome……Rockhopper.penguin. | S..magellanicus……Magellanic.penguin. | Penguins……Penguin.sp.. | T..melanophris……Black.browed.albatross. | T..cauta……Shy.albatross. | T..chlororhynchos……Atlantic.yellow.nosed.albatross. | D..exulans……Wandering.albatross. | D..dabbenena……Tristan.albatross. | Diomedea.sp…….Great.albatrosses.sp.. | D..epomophora……Southern.royal.albatross. | D..sanfordi……Northern.royal.albatross. | D..epomophora……including.Diomedea.sanfordi. | Albatrosses……Albatross.sp.. | M..giganteus……Southern.giant.petrel. | Macronectes.sp…….Giant.petrel.sp.. | F..glacialis……Northern.fulmar. | D..capense……Cape.petrel. | P..macroptera……Great.winged.petrel. | P..feae……Fea.s.petrel. | P..incerta……Atlantic.petrel. | P..arminjoniana……Trinidade.petrel. | P..mollis……Soft.plumaged.petrel. | B..bulwerii……Bulwer.s.petrel. | P..aequinoctialis……White.chinned.petrel. | P..conspicillata……Spectacled.petrel. | Petrels……Petrel.sp.. | Pachyptila.sp…….including.Halobaena.sp.. | C..diomedea……Cory.s.shearwater. | C..edwardsii……Cape.Verde.shearwater. | P..gravis……Great.shearwater. | P..griseus……Sooty.shearwater. | P..puffinus……Manx.shearwater. | P..mauretanicus……Balearic.shearwater. | P..baroli……Macaronesian.shearwater. | P..lherminieri……Audubon.s.shearwater. | P..assimilis……Little.shearwater. | Shearwaters……Shearwater.sp.. | O..oceanicus……Wilson.s.storm.petrel. | G..nereis……Grey.backed.storm.petrel. | P..marina……White.faced.storm.petrel. | F..grallaria……White.bellied.storm.petrel. | O..castro……Madeiran.storm.petrel. | O..leucorhoa……Leach.s.storm.petrel. | O..castro……including.Oceanodroma.leucorhoa. | H..pelagicus……European.storm.petrel. | Storm.petrels……Storm.petrel.sp.. | P..aethereus……Red.billed.tropicbird. | P..lepturus……White.tailed.tropicbird. | Tropicbirds……Tropicbird.sp.. | F..aquila……Ascension.frigatebird. | F..magnificens……Magnificent.frigatebird. | M..bassanus……Northern.gannet. | S..capensis……Cape.gannet. | S..sula……Red.footed.booby. | S..leucogaster……Brown.booby. | C..skua……Great.skua. | C..maccormicki……South.polar.skua. | C..antarctica……Antarctic.skua. | S..pomarinus……Pomarine.skua. | S..parasiticus……Arctic.skua. | S..longicaudus……Long.tailed.skua. | Skuas……Skua.sp.. | B..bernicla……Brent.goose. | G..arctica……Black.throated.diver. | P..capensis……Cape.cormorant. | P..coronatus……Crowned.cormorant. | P..carbo……Great.cormorant. | P..magellani……Magellanic.diving.petrel. | Pelecanoides.sp…….Diving.petrel.sp.. | P..fulicarius……Red.phalarope. | L..canus……Common.gull. | L..melanocephalus……Mediteranean.gull. | L..argentatus……Herring.gull. | L..fuscus……Lesser.black.backed.gull. | L..michahellis……Yellow.legged.gull. | L..dominicanus……Cape.gull. | L..marinus……Great.black.backed.gull. | L..ridibundus……Black.headed.gull. | L..minutus……Little.gull. | R..tridactyla……Black.legged.kittiwake. | X..sabini……Sabine.s.gull. | Gulls……Gull.sp.. | S..hirundo……Common.tern. | S..arctica……Arctic.tern. | S..dougallii……Roseate.tern. | S..anaethetus……Bridled.tern. | S..fuscata……Sooty.tern. | S..sandvicensis……Sandwich.tern. | T..maximus……Royal.tern. | C..niger……Black.tern. | T..bergii……Crested.tern. | Terns……Tern.sp.. | A..stolidus……Brown.noddy. | U..aalge……Guillemot. | A..torda……Razorbill. | Alcidae.sp…….Alcidae.sp.. | Seabird.unident……Seabird..unidentified. | P..catodon……Sperm.whale. | M..novaeangliae……Humpback.whale. | B..physalus……Fin.whale. | B..borealis……Sei.whale. | B..acutorostrata……Minke.whale. | B..brydei……Bryde.s.whale. | G..melas……Long.finned.pilot.whale. | G..macrorhynchus……Short.finned.pilot.whale. | Globicephala.sp…….Pilot.whale.sp.. | Z..cavirostris……Cuvier.s.beaked.whale. | Beaked.whale……Beaked.whale.sp.. | Whale.unident……Whale..unidentified. | O..orca……Killer.whale. | L..australis……Peale.s.dolphin. | L..albirostris……White.beacked.dolphin. | Lagenorhynchus.sp…….Lagenorhynchus.sp.. | D..delphis……Common.dolphin. | S..frontalis……Atlantic.spotted.dolphin. | S..coeruleoalba……Striped.dolphin. | S..clymene……Clymene.dolphin. | T..truncatus……Bottlenose.dolphin. | G..griseus……Risso.s.dolphin. | S..bredanensis……Rough.toothed.dolphin. | S..longirostris……Spinner.dolphin. | Dolphin.unident……Dolphin..unidentified. | P..phocoena……Harbour.porpoise. | A..pusillus……South.African.fur.seal. | C..caretta……Loggerhead.sea.turtle. | C..mydas……Green.sea.turtle. | D..coriacea……Leatherback.sea.turtle. | Sea.turtles……Sea.turtle.sp.. | Manta.sp…….Manta.ray. | Ray……Ray. | Hammerhead.shark……Hammerhead.shark. | Shark……Shark. | Mola.mola……Sun.fish. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 135 | 2012-04-18T14:00 | -31.42 | -39.43 | 4661 | 9.6 | 8.8896 | 35.8645 | 23.0101 | 3.02 | 9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 143 | 2012-04-19T09:00 | -28.98 | -39.00 | 4330 | 10.6 | 9.8156 | 35.9608 | 24.6779 | 2.71 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 144 | 2012-04-19T09:30 | -28.89 | -39.00 | 4196 | 10.7 | 9.9082 | 36.1643 | 24.8572 | 2.82 | 8 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 145 | 2012-04-19T10:00 | -28.80 | -39.00 | 4068 | 10.6 | 9.8156 | 36.0574 | 24.7066 | 2.84 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 146 | 2012-04-19T10:30 | -28.70 | -39.00 | 3916 | 10.6 | 9.8156 | 35.9939 | 24.6284 | 2.84 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
polar %>% mutate(temp_high_23 = ifelse(Temp...C...Mid.mean.surface.water.temper.... >= 23, TRUE, FALSE)) %>%
filter(temp_high_23 ==TRUE) ##creating a new column that shows which temp are greater than 23 - makes a new column in order to do the same thing as the first codeEjercicio 5
En este ejercicio, vas a manipular la estructura de datos “parrot”.
a) Elimina las especies que nunca están registradas y también elimina la información que no vamos a utilizar: “longitud” (Longitude), “latitud” (Latitude) y “tiempo en minutos” (Time..min.).
b) Reemplaza los puntos en los nombres de especies por guiones utilizando la función str_replace().
c) Ahora que hemos manipulado la estructura de datos a nuestro gusto, crea un gráfico de barras (bar graph) visualizando la suma de abundancia para cada especie.
Haz clic aquí para solución!
parrot <- read.csv("parrot.csv")
head(parrot)| Longitude | Latitude | Code | Time..min. | Date.Time | A..amazonica…. | A..autumnalis…. | A..barbadensis…. | A..dufresniana…. | A..farinosa…. | A..festiva…. | A..mercenaria…. | A..ochrocephala…. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| -72.54740 | 10.31623 | NM05 | 3 | 2010-03-15T11:13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.54267 | 10.31252 | NM05 | 3 | 2010-03-15T11:06 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.53757 | 10.31035 | NM05 | 3 | 2010-03-15T10:59 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.53145 | 10.30940 | NM05 | 3 | 2010-03-15T10:54 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| -72.52523 | 10.30667 | NM05 | 3 | 2010-03-15T10:46 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
parrot_clean_wrangle <- parrot %>%
select(-`A..dufresniana....`, -`A..festiva....`, -`A..autumnalis....`, -`A..mercenaria....`) %>%
select(-Longitude, -Latitude, -`Time..min.`) %>%
rename(site = Code)
colnames(parrot_clean_wrangle) <- str_replace(str_remove_all(colnames(parrot_clean_wrangle), "\\.\\.\\.\\."), "\\.\\.", "_")
head(parrot_clean_wrangle)| site | Date.Time | A_amazonica | A_barbadensis | A_farinosa | A_ochrocephala |
|---|---|---|---|---|---|
| NM05 | 2010-03-15T11:13 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T11:06 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T10:59 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T10:54 | 0 | 0 | 0 | 0 |
| NM05 | 2010-03-15T10:46 | 0 | 0 | 0 | 0 |
parrot_clean_filter <- parrot_clean_wrangle %>% filter((A_amazonica != 0 | A_barbadensis != 0 | A_farinosa != 0 | A_ochrocephala != 0))parrot_clean_filter %>%
pivot_longer(names_to = "Species", values_to = "Abundance", A_amazonica:A_ochrocephala) %>%
group_by(Species) %>%
summarise(total_abundance = sum(Abundance)) %>%
ggplot(aes(x = Species, y = total_abundance)) + geom_bar(stat = "identity")Ejercicio 6
En este ejercicio, utiliza la estructura de datos original “butterfly_genus_site” para cambiar la estructura a formato ancho y asignar la nueva estructura al nombre “butterfly_wide”. Luego, cambia la nueva estructura “butterfly_wide” de nuevo a formato largo y asígnala a un objeto llamado “butterfly_long”, para practicar el uso de este tipo de funciones.
Haz clic aquí para solución!
butterfly_wide <- pivot_wider(butterfly_genus_site, names_from = Genus, values_from = n_spe)
butterfly_wide <- pivot_wider(butterfly_genus_site, names_from = Genus, values_from = n_spe, values_fill = 0)
butterfly_long <- pivot_longer(butterfly_wide, values_to = 'number_species', names_to = "genus", -sites_ID)
butterfly_long <- pivot_longer(butterfly_genus_site )